<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>_this</title>
</head>
<body>
    
</body>
</html>
<script>
    // "use strict";
    // //函数调用
    // //全局环境下的this指代的就是windows对象的引用
    // console.log(this == window)

    // var hd = '后盾人';
    // function get(){
    //     // "use strict";
    //     return this.hd;
    // }

    // console.log(get());
    //这里需要说明的是   再hd对象中的this 指代的是hd对象
    //对象里面声明的非属性的方法   指代的就是this,可以调用全局变量
    // var username = 'liulang';
    // let hd = {
    //     title:'liuhao',
    //     getName:function(){
    //         function getnames(){
    //             console.log(this)
    //             // return this.username;
    //         }
    //        return getnames();
    //     },
        
    // };
    // console.log(hd.getName());
    // console.log(window)

    //构造函数
//     function User(){
//         this.name = '后盾人';
//         this.say = function(){
//             // console.log(this);//User {name: "后盾人", say: ƒ}
//             return this.name;
//         }
//     }
//     let hd = new User();
//    console.log(hd.say());

//对象字面量
// let obj = {
//     site:"后盾人",
//     show(){//属于对象方法，this指向obj
//         // console.log(this.site);
//         // console.log(`this in show method:${this}`)
//         function hd(){//hd() 不属于对象方法，属于window对象
//             // console.log(typeof this.site)
//             console.log(`this in hd function ${this}`);
//         }
//         hd();
//     }
// }
// obj.show();

//map第二个参数传递this|Lession的时候 就更改了this的指向
// let Lesson = {
//     site : "后盾人",
//     lists : ["js","css","mysql"],
//     show(){
//         return this.lists.map(function(title){
//             //给每本书前面拼接上site
//             // console.log(this)//window对象
//             return `${this.site} - ${title}`;
//         },this);//map第二个参数传递this|Lession的时候 就更改了this的指向
//     }
// };
// console.log(Lesson.show());

//在父级作用域中定义引用this变量
// let Lesson = {
//     site:"后盾人",
//     lists : ["js","css","mysql"],
//     show(){
//         const self = this;
//         return self.lists.map(function(title){
//             return `${self.site} - ${title}`;
//         });
//     }
// };

// console.log(Lesson.show());


//箭头函数没有this   箭头函数和上级函数使用同一个this   
//当在函数中想调用上层的数据   就使用箭头函数
// var name = 'hdcms';
// var obj = {
//     name : '后盾人',
//     getName:function(){
//         //匿名函数不属于对象  所以使用的是window对象
//         return function(){
//             return this.name;
//         }
//     }
// };
// console.log(obj.getName()());



// var name = 'hdcms';
// var obj = {
//     name : '后盾人',
//     getName:function(){
//         var self = this;
//         return () => {
//             return this.name;
//         }
//     }
// };
// console.log(obj.getName()());


//使用箭头函数后  this 为定义函数的上下文,也可以理解为父作用域
// this
// var name = 'hdcms';
// var obj = {
//     name : '厚度柔嫩',
//     getName:function(){
//         return () => {
//             return this.name;
//         }
//     }
// };
// console.log(obj.getName()());





    
    


</script>